﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using SistemaAcademicoTCCDAO;
using SistemaAcademico.Util;
using System.Data.Objects;

namespace SistemaAcademico.Pages
{
    public partial class NovoUsuario : System.Web.UI.Page
    {

        SATCCEntities container = new SATCCEntities();

        void Page_PreRenderComplete(object sender, EventArgs e)
        {
            if (!IsPostBack)
                ddlTurma.Items.Insert(0, "Selecione a turma...");
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            btnAdd.ServerClick += btnAdd_ServerClick;
            btnRem.ServerClick += btnRem_ServerClick;
        }

        void btnRem_ServerClick(object sender, EventArgs e)
        {
            Transfer.TransferListItem(ref lstDisciplinasMinistradas, ref lstDisciplinasOferecidas);
        }

        void btnAdd_ServerClick(object sender, EventArgs e)
        {
            Transfer.TransferListItem(ref lstDisciplinasOferecidas, ref lstDisciplinasMinistradas);
        }

        protected void btnContinuar_Click(object sender, EventArgs e)
        {
            //VALIDAÇÕES

            if (ValidaCampos())
            {


                UserSet user = new UserSet();
                EnderecoSet endereco = new EnderecoSet();

                user.dsLogin = txtUserName.Text;
                user.dsSenha = Criptografia.Criptografa(txtSenha.Text);

                endereco.dsBairro = txtBairro.Text;
                endereco.dsCEP = txtCEP.Text;
                endereco.dsCidade = txtCidade.Text;
                endereco.dsEstado = ddlEstados.SelectedValue;
                endereco.dsLogradouro = txtLogradouro.Text;
                user.EnderecoSet.Add(endereco);

                bool cadastroOk = false;

                switch (ddlCadastro.SelectedValue)
                {
                    case "Aluno":
                        if (ValidaCamposAluno())
                        {
                            AlunoSet aluno = new AlunoSet();

                            user.cdPermissao = "1";

                            aluno.cdCPF = txtCPF.Text;
                            aluno.cdRG = txtRG.Text;
                            aluno.cdMatricula = "";
                            aluno.dsEmail = txtEmail.Text;
                            aluno.dsTelefone = txtTelefone1.Text;
                            aluno.dsTelefone2 = String.IsNullOrEmpty(txtTelefone2.Text.Trim()) ? "Nao possui" : txtTelefone2.Text;
                            aluno.dtNasc = txtNascimento.Text;
                            aluno.nmAluno = txtNomeCompleto.Text;
                            aluno.TurmaId = Convert.ToInt32(ddlTurma.SelectedValue);
                            TurmaSet turma = container.TurmaSet.Where(t => t.Id == aluno.TurmaId).First();
                            turma.AlunoSet.Add(aluno);

                            user.AlunoSet.Add(aluno);
                            cadastroOk = true;
                        }

                        break;

                    case "Professor":
                        if (ValidaCamposProfessor())
                        {
                            ProfessorSet professor = new ProfessorSet();

                            user.cdPermissao = "2";

                            professor.dsCPF = txtCPF.Text;
                            professor.dsEmail = txtEmail.Text;
                            professor.dsRG = txtRG.Text;
                            professor.dsTelefone = txtTelefone1.Text;
                            professor.dsTelefone2 = String.IsNullOrEmpty(txtTelefone2.Text.Trim()) ? "Não possui" : txtTelefone2.Text;
                            try
                            {
                                professor.dtNasc = Convert.ToDateTime(txtNascimento.Text);
                                professor.nmProfessor = txtNomeCompleto.Text;
                                professor.dsFormacao = txtFormacao.Text;
                                user.ProfessorSet.Add(professor);
                                foreach (ListItem item in lstDisciplinasMinistradas.Items)
                                {
                                    Int32 materiaId = Convert.ToInt32(item.Value);
                                    var materia = container.MateriaSet.Where(m => m.Id == materiaId).First();
                                    professor.MateriaSet.Add(materia);
                                }
                                cadastroOk = true;
                            }
                            catch (Exception)
                            {
                                Response.Write("<script>alert('Ocorreu um erro! Verifique a data de nascimento inserida. Se o erro persistir, entre em contato com o administrador do sistema.');</script>");
                            }
                        }
                        break;

                    case "Administrador":
                        user.cdPermissao = "3";



                        cadastroOk = true;
                        break;
                    default:
                        break;
                }

                if (cadastroOk)
                {
                    container.UserSet.AddObject(user);
                    container.SaveChanges(); 
                }

            }
        }

        public bool ValidaCampos()
        {
            if (String.IsNullOrEmpty(txtBairro.Text))
            {
                Response.Write("<script>alert('Digite seu bairro');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtCEP.Text))
            {
                Response.Write("<script>alert('Digite seu CEP');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtCidade.Text))
            {
                Response.Write("<script>alert('Digite sua cidade');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtConfiSenha.Text))
            {
                Response.Write("<script>alert('Digite sua confirmação de senha.');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtCPF.Text))
            {
                Response.Write("<script>alert('Digite seu CPF');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtEmail.Text))
            {
                Response.Write("<script>alert('Digite seu e-mail');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtLogradouro.Text))
            {
                Response.Write("<script>alert('Digite seu logradouro');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtNascimento.Text))
            {
                Response.Write("<script>alert('Digite sua data de nascimento.');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtNomeCompleto.Text))
            {
                Response.Write("<script>alert('Digite seu nome');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtRG.Text))
            {
                Response.Write("<script>alert('Digite seu RG');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtSenha.Text))
            {
                Response.Write("<script>alert('Digite sua senha');</script>");
                return false;
            }
            if (!String.Equals(txtSenha.Text, txtConfiSenha.Text))
            {
                Response.Write("<script>alert('As senhas não conferem');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtTelefone1.Text))
            {
                Response.Write("<script>alert('Preencha o telefone');</script>");
                return false;
            }
            if (String.IsNullOrEmpty(txtUserName.Text))
            {
                Response.Write("<script>alert('Preencha seu login!');</script>");
                return false;
            }
            if (txtSenha.Text.Length < 6)
            {
                Response.Write("<script>alert('Sua senha deve ter 6 dígitos');</script>");
                return false;
            }
            if (txtUserName.Text.Length < 6)
            {
                Response.Write("<script>alert('Seu login deve ter 6 dígitos');</script>");
                return false;
            }
            if (container.sp_VerificaLoginInt(txtUserName.Text).Single() == 1)
            {
                Response.Write("<script>alert('Esse login já está em uso!');</script>");
                return false;
            }
            if (!Validator.ValidateCPF(txtCPF.Text))
            {
                Response.Write("<script>alert('CPF inválido! Digite um CPF válido!');</script>");
                return false;
            }
            if (!Validator.ValidateEmail(txtEmail.Text))
            {
               Response.Write("<script>alert('Digite um e-mail válido!');</script>");
                return false; 
            }

            return true;
        }

        public bool ValidaCamposProfessor()
        {
            if (String.IsNullOrEmpty(txtFormacao.Text))
                return false;

            return true;
        }

        public bool ValidaCamposAluno()
        {
            if (ddlTurma.SelectedIndex == 0)
            {
                Response.Write("<script>alert('Selecione uma turma!');</script>");
                return false;
            }

            return true;
        }


    }
}